package demo01;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
 *  服务器端实现步骤：
 *      1. 创建服务器ServerSocket对象和系统要指定的端口号
 *      2. 使用ServerSocket对象中的方法accept，获取到请求的客户端对象Socket
 *      3. 使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
 *      4. 使用网络字节输入流InputStream对象中的方法read()，读取客户端发送的数据
 *      5. 使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
 *      6. 使用网络字节输出流OutputStream对象中的方法write()，给客户端回写数据
 *      7. 释放资源（Socket，ServerSocket）
 */
public class TCPServer {
    public static void main(String[] args) {
        // 1. 创建服务器ServerSocket对象和系统要指定的端口号
        try (ServerSocket serverSocket = new ServerSocket(8888)) {
            // 2. 使用ServerSocket对象中的方法accept，获取到请求的客户端对象Socket
            Socket socket = serverSocket.accept();
            // 3. 使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
            InputStream inputStream = socket.getInputStream();
            // 4. 使用网络字节输入流InputStream对象中的方法read()，读取客户端发送的数据
            byte[] bytes = new byte[1024];
            int len = inputStream.read(bytes);
            System.out.println(new String(bytes, 0, len)); // 输出从客户端收到的字节语句
            // 5. 使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
            OutputStream outputStream = socket.getOutputStream();
            // 6. 使用网络字节输出流OutputStream对象中的方法write()，给客户端回写数据
            outputStream.write("服务器端-->客户端（接收数据成功！）".getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        } // 7. 释放资源（Socket，ServerSocket），try-resources语句自动完成
    }
}
